package com.a2.appa3.model.network;

import com.a2.appa3.global.Constants;
import com.a2.appa3.model.network.entity.req.ResCode;
import com.a2.appa3.model.network.entity.req.ResIdear;
import com.a2.appa3.model.network.entity.req.ResLogin;
import com.a2.appa3.model.network.entity.req.ResRoomInfo;
import com.a2.appa3.model.network.entity.req.ResRoomlist;
import com.a2.appa3.model.network.entity.req.ResURL;
import com.a2.appa3.model.network.entity.req.ResUserInfo;
import com.a2.appa3.model.network.entity.req.Resaddfriend;
import com.a2.appa3.model.network.entity.req.Resberifystatus;
import com.a2.appa3.model.network.entity.req.Resbuildground;
import com.a2.appa3.model.network.entity.req.Rescodemessage;
import com.a2.appa3.model.network.entity.req.Resfindfriend;
import com.a2.appa3.model.network.entity.req.Resmsg;
import com.a2.appa3.model.network.entity.req.Respass;
import com.a2.appa3.model.network.entity.req.Resregister;
import com.a2.appa3.model.network.entity.req.Restyelogin;
import com.a2.appa3.model.network.entity.req.TestEntity;
import com.a2.appa3.model.network.entity.req.WebSocketMsgBeannew;
import com.a2.appa3.model.network.entity.req.changeNikeNameBean;
import com.a2.appa3.model.network.entity.req.getHongbaoBean;
import com.a2.appa3.model.network.entity.req.update_PwdBean;
import com.a2.appa3.model.network.entity.req.websocktdizhiBena;

import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.Url;

/**
 * 网络json请求Api
 */
public interface HttpJsonApi {

    //登录
    @POST(Constants.METHOD_TEST)
    Observable<String> test(@Body TestEntity testEntity);

    //获取链接
    @GET
    Observable<ResURL> getUrlList(@Url String url);


    //登录
    @POST
    Observable<ResLogin> login(@Url String url, @Query("username") String peuser,
                               @Query("password") String password,
                               @Query("x_value") String x_value,
                               @Query("passport") String passport,
                               @Query("token") String token
    );

    //获取socket地址
    @GET
    Observable<websocktdizhiBena> get_websocket_adress(@Url String url,
                                                       @Query("token") String token);

    //抢红包
    @GET
    Observable<getHongbaoBean> get_hongbao(@Url String url, @Query("id") String id,
                                           @Query("token") String token);

    //发送短信
    @GET
    Observable<Resmsg> sendmsg(@Url String url,
                               @Query("type") String type);

    //修改密码
    @POST
    Observable<Respass> changepass(@Url String url,
                                   @Query("phone") String phone,
                                   @Query("sms_code") String sms_code,
                                   @Query("password") String password,
                                   @Query("password_confirmation") String password_confirmation);

    //验证码
    @GET
    Observable<ResCode> getcode(@Url String url,
                                @Query("token") String token);

    //注册 peuser, password, realname, phone, username, codes, code);
    @POST
    Observable<Resregister> register(@Url String url, @Query("userName") String peuser,
                                     @Query("password") String password,
                                     @Query("fullName") String realname,
                                     @Query("contact") String phone,
                                     @Query("superUserName") String username,
                                     @Query("captcha_code") String codes,
                                     @Query("code") String code
    );

    //搜索好友
    @GET
    Observable<Resfindfriend> finfriend(@Url String url, @Query("name") String name,
                                        @Query("token") String token);

    //搜索指定好友
    @GET
    Observable<ResUserInfo> searchUserInfo(@Url String url, @Query("toUserId") String name,
                                           @Query("token") String token, @Query("nocache") String nocache);

    //查询用户信息
    @POST
    Observable<ResLogin> finduser(@Url String url,
                                  @Query("token") String token);

    //添加好友
    @GET
    Observable<Resaddfriend> insertmyfriend(@Url String url, @Query("toUserId") String rows,
                                            @Query("token") String token);

    //删除好友
    @GET
    Observable<Resaddfriend> delUserFriends(@Url String url, @Query("to_id") String rows,
                                            @Query("token") String token);

    //删除最近聊天
    @GET
    Observable<Resaddfriend> delHistoryChatList(@Url String url, @Query("type") String rows, @Query("id") String id,
                                                @Query("token") String token);

    //同意或拒绝添加好友
    @GET
    Observable<Resaddfriend> addfriend(@Url String url, @Query("logId") String logId, @Query("status") String status,
                                       @Query("token") String token);

    //修改登录密码
    @POST
    Observable<update_PwdBean> get_updat_loginpwd(@Url String url,
                                                  @Query("oldPwd") String oldPwd,
                                                  @Query("newPwd") String newPwd,
                                                  @Query("token") String token);

    //修改昵称
    @POST
    Observable<changeNikeNameBean> change_niocheng(@Url String url, @Query("nickname") String nickname,
                                                   @Query("token") String token);

    //绑定手机号
    @GET
    Observable<changeNikeNameBean> change_phone(@Url String url, @Query("phone") String nickname,
                                                @Query("token") String token);

    //修改备注
    @POST
    Observable<changeNikeNameBean> setRemark(@Url String url,
                                             @Query("toId") String toId,
                                             @Query("remark") String remark,
                                             @Query("token") String token);

    //意见反馈
    @POST
    Observable<ResIdear> putidear(@Url String url,
                                  @Query("type") String type,
                                  @Query("content") String content,
                                  @Query("token") String token);

    //创建群聊
    @POST
    Observable<Resbuildground> releaseRoom(@Url String url,
                                           @Query("roomId") String type,
                                           @Query("token") String token);

    //退出登录
    @GET
    Observable<Resbuildground> logout(@Url String url,
                                      @Query("token") String token); //退出登录

    //群管理详情
    @GET
    Observable<ResRoomInfo> roomInfo(@Url String url,
                                     @Query("roomId") String roomId,
                                     @Query("token") String token);

    //群成员列表
    @GET
    Observable<ResRoomlist> roomList(@Url String url,
                                     @Query("roomId") String roomId,
                                     @Query("token") String token);

    // 全部群成员列表
    @GET
    Observable<ResRoomlist> roomuserList(@Url String url,
                                         @Query("roomId") String roomId,
                                         @Query("token") String token);

    //群内成员拉人
    @GET
    Observable<Rescodemessage> invitationUsers(@Url String url,
                                               @Query("roomId") String roomId,
                                               @Query("toUsers") String toUsers,
                                               @Query("token") String token);

    //管理者踢人
    @GET
    Observable<Rescodemessage> deleteUser(@Url String url,
                                          @Query("roomId") String roomId,
                                          @Query("user_id") String toUsers,
                                          @Query("token") String token);

    //管理者审核加人
    @GET
    Observable<changeNikeNameBean> passlog(@Url String url,
                                           @Query("id") String id,
                                           @Query("token") String token);

    //修改群聊昵称
    @POST
    Observable<changeNikeNameBean> changegroupnikename(@Url String url, @Query("nickname") String nickname,
                                                       @Query("roomId") String roomId,
                                                       @Query("token") String token);

    //退出群聊
    @POST
    Observable<changeNikeNameBean> user_drop_outclass(@Url String url,
                                                      @Query("roomId") String roomId,
                                                      @Query("token") String token);

    //获取聊天记录
    @GET
    Observable<WebSocketMsgBeannew> getList(@Url String url,
                                            @Query("token") String token
            , @Query("id") String id
            , @Query("index") String index
            , @Query("w") String w
            , @Query("type") String type
            , @Query("page_size") String page_size);//默认不穿

    @GET
    Observable<Restyelogin> tyelogin(@Url String url); //滑动验证码

    //登录
    @POST
    Observable<ResLogin> init(@Url String url,
                              @Query("token") String token);

    //验证状态
    @GET
    Observable<Resberifystatus> getberifystatus(@Url String url);
}
